PHPWIND
HELLOCQ
UID:11951
UID:2163
UID:9836
UID:319
弄个正玄函数表进去.然后数模转换,效果会更好.现在这样弄,不合理,浪费单片机资源
UID:12537
不用正弦表,没那么复杂——通常只是4位d/a,一个波形的幅度上只分8段(只考虑半个正弦波,负半波与正半波对称。其实90度以后与90度以前也是对称),只要把这8个台阶的对应的水平位置记下,对时间计数时超过一个位置、输出幅度加1或减1就可以了,反正输出计数周期比波形周期快得多。用这种方法做太简单了,我在用pwm做,elan的单片机。
bg7jun,你好!我现在的做法是利用方波输出,然后经电阻、电容积分成锯齿波。
呵呵反正rom够了,牺牲硬件换取软件算法的简单
我认为还是用直接dds的好,不需要太快的速度,用51建议用那个电阻网络转换的假如你的单片机足够快,比如用pic或者avr就另当别论了
硬件有硬件的做法,软件有软件的做法,看各人擅长和喜好,以及这个电路还要实现什么附加功能——不用亚音片、用纯硬件也可以实现,只不过成本及灵活性比较差。如果用da实现,软件就没什么好做的了,也是最常用的亚音生成方法;如果用pwm实现,尤其是在51上,对于写软件就需要技巧,才有点挑战性。如果是做产品,前者在可行性、成功率、成本等方面都有无可比拟的优势;如果是玩,那就用后者,理由就是“更好玩”。做系统设计,最忌讳直接就想到某个方法是最好的,哪怕凭直觉就知道这个方法优势很多,也必须作为多个方案之一进行评审。
UID:9971
感觉好浪费和复杂化,另外有了单片机等高时钟的东西在里面,对接收机很影响,,本来就忌讳这些
pwm就是:如果要输出幅度最大是8,那么对于幅度为1,就是1/8的时间输出高、其它7/8的时间输出低(“1/8”称为“占空比”);如果是2,就是2/8高、6/8低……依此类推,直到8/8,也就是整个时间都是高。连续输出这个脉冲波就得到了一个平均的电压;连续改变脉冲的占空比就可输出任意波形。如果输出是正负波形的,那么,-1对应7/16,1对应9/16,0对应8/16……依此类推,-8就是0/16,8对应16/16。然后用电容隔直。这个“16”的周期(通常叫斩波周期,它的频率叫斩波频率),要比输出波形的最高频率高10倍以上,越高越好。例如,对于亚音,斩波频率至少要2.5khz,为了低通电路简单一点,至少要做到10k以上。尽量对于不同的亚音用相同的斩波频率,亚音频率的变化用不同的个数的斩波周期来实现,幅度就不会随亚音频率变化了——楼主那个电路用积分电路实现低通,最低频和最高频率的幅度会差4倍。pwm是实现da的一种方法——如果周期足够小、对占空比计数的分辨率足够高,再加上一些数字滤波算法,就可以得到一种称为sigma-delta的da转换算法(前面那两个英文单词实际上是两个希腊字母,懒得找了),现在cd的转换很多就是用这种方法,可以实现96k-20bit的精度。