There is no need to use a DAC. Voltages are used to represent 1's and 0's by the convention that anything under 0.8V (AKA 'low') is a zero, and anything over 2.4V (AKA 'high') is a one. It's relatively simple to construct circuits that perform logic on these representative voltages.
For example, a circuit can output something in the 2.4V to 5V range to represent '1' if either input is over 2.4V, or something less than 0.8V otherwise, and you have an OR gate. If it requires both inputs representing 1 in order to output 2.4V, you have an AND gate. An inverter just outputs a high when the input is low, and vice-versa. You can build simple gates like these with just a very few transistors, and perform combinatorial boolean logic. By using groups of bits to represent numbers, you can even build circuits to add numbers with combinatorial logic, no software required.
Once you are working with gates, you can construct flip flops, and from them, registers and counters. Flip-flops allow you to store 1's and 0's from one point in time and use them later on. Registers and counters are circuits that perform functions on groups of bits that represent numbers. A register holds a number until you load a new number into it. A counter is like a register, but has another input that causes the stored number to increment. (Decrement is possible too). This puts you in the realm of state machines and sequential logic, still, no software required.
Memory systems are a way to store massive numbers of bits. At a component level, some memory is built like a huge collection of flip-flops, but more commonly there is another technology (DRAM) that, while not exactly a flip flop, does the same thing.
As a further step, you can build a system of sequential and combinatorial logic that can carry out operations depending on the bits stored in a memory system, including writing back new values to that memory system. Now you've arrived at the level of the processor, and everything the processor does, is just hardware carrying out lots of simple tasks. (microprogrammed cores notwithstanding). At this point, the particular combinations of bits that you put in the memory system can be considered machine language software.
Several comments:
- If you don't need isolation, then (obviously) you don't need any device that includes isolation, such as a SSR. If you do need isolation, you probably don't need it for each channel. A single isolation gap, for all 16 channels, should be enough. All this could save you money.
- Snubbers don't protect the switches (the SSRs, in your case). They just reduce the probability of false triggering. False triggering is not a harm for your switches (they are there to be triggered, even continuosly). The false firings are an inconvenience (or an obstacle), if your application is such that the load should never be powered when you don't want it to (e.g., you have an electric saw, there's been an accident, and you need to switch it off right away).
- Since the 24 V are AC, if you use unidirectional switches (such as MOSFETs, or BJTs), you will need two switches per channel.
EDIT: a MOSFET is unidirectional, because it conducts in both directions, but it blocks in only one direction. For instance, a normal silicon NMOSFET cannot block current from S to D, due to the parasitic diode it has. Since that diode is there, if you want to use MOSFETs for AC, you CAN, but you need to put two in anti-series (with their sources tied together, and their gates tied together), or otherwise you won't be able to block in one of the two directions. GaAs MOSFETs don't have that parasitic diode, so one device would be enough, for AC.
- I would go for a cheap TRIAC per channel (probably, without any snubber, because 24 VAC is such a low voltage, that you probably won't hit any dV/dt limit).
- A cheap TRIAC like this one would work.
Best Answer
You can use two SPDT relays to select +9 or -9 or 0V.
Both energized = off, Both de-energized = off, and if one is energized and the other is not it will drive the actuator in one direction or the other.
simulate this circuit – Schematic created using CircuitLab
To suppress electrical noise, add a bridge rectifier (W04G, for example) across the actuator (the AC input terminals) and connect the + terminal to +9 and the - terminal to 0V