我正在学习机器人团队的编码。我的老人给了我任务,我完成了。我们使用atmel studio(c语言)在ATMEGA32微控制器上编码。最近的任务是生成32khz频率pwm。我使用16位定时器完成任务,因为我认为8位不可能因为没有任何合适的预分频器(在快速模式下,你得到62 khz没有预分频器,下一个预分频器是f / 8 !!)。但是我的大四学生说使用任何模式都可以8位!请告诉我如何使用8位定时器获得32khz,因为除非我自己更改时钟频率(这是不允许的),否则我看不出它是怎么可能的。快速模式是首选。我是否必须对TCNT0寄存器执行某些操作?
答案 0 :(得分:1)
你可以通过每个周期两次使用比较寄存器在16MHz产生32kHz的8位定时器,得到32kHz你可以使用时钟分频器到/ 8并从0到62计数(这给你大约32.2kHz)所以,首先将比较寄存器OCR0设置为pwm值,该值应该在0到61之间,并且在OCF0上得到比较中断后,将OCR更改为62并等待OCF0上的下一个中断。在那里,您清除TCNT0以再次启动该过程(或者可能将第二个中断设置为使用CTC模式,但您仍然需要进入中断以在正常模式下设置下一个中断)...
基本上没有办法设置波形发生器在16MHz的ATmega32上自动执行32KHz PWM信号,但你仍然可以使用定时器模块和它的比较寄存器来产生你需要的信号......