backwoodsjack:
thats exactly what i have in mind.. 60cps.. but sample 360 times a second.. then just a one pole hi-current filter directly on the output of the H-bridge..
i just need a table 180 deg would be great ..
thanks
your one bit table is either 0 or 1; so if you want 360 values, have 180 '0' followed by 180 '1'.
If instead you want a PWM(8bit) value for sine, you only need 90 degrees of values with a quadrant value (0..3)
if you don't have a polarity output you are going to actually have a 7bit PWM signal biased to 1/2 Vcc.
const uint8_t sineTable[90] PROGMEM=
{ 0, 2, 4, 6, 8, 11, 13, 15, 17, 20, 22, 24, 26, 28, 30, 33,
35, 37, 39, 41, 43, 44, 45, 47, 50, 52, 54, 56, 58, 60, 62, 64,
65, 67, 69, 71, 73, 75, 77, 78, 80, 82, 83, 85, 87, 88, 90, 92,
93, 95, 96, 98, 99,100,102,103,104,106,107,108,109,110,111,113,
114,115,116,116,117,118,119,120,121,121,122,123,123,124,124,125,
125,126,126,126,127,127,127,127,127,127};
uint8_t pwmSine(uint16_t angle){
angle = angle % 360; // only handle 0..359
uint8_t quad= angle / 90; // calculate which quadrant (0..3)
angle = angle % 90; // calculate angle in quadrant (0..89)
switch(quad){
case 0: return pgm_read_byte_near(sineTable+angle)+128;
break;
case 1: return pgm_read_byte_near(sineTable+89-angle)+128;
break;
case 2 : return 128-pgm_read_byte_near(sineTable+angle);
break;
case 3 : return 128 -pgm_read_byte_near(sineTable+89-angle);
break;
default : ;
}
}
void setup(){
Serial.begin(9600);
for(uint16_t a=0;a<360;a++){
Serial.println(pwmSine(a),DEC);
}
}
void loop(){}
Chuck.