单片机可以调节电阻的阻值吗
- 提问者网友:轮囘Li巡影
- 2021-02-28 18:33
- 五星知识达人网友:酒安江南
- 2021-02-28 18:40
相对机械旋转的电位计而言,这种电位计的调节速度快,控制精度高。
- 1楼网友:酒安江南
- 2021-02-28 19:21
你可以做个这样的实验,让单片机输出pwm波,让他自动的调节占空比,先由大到小,然后由小到大,然后你用比较准确的数字万用表测输出的电压,你会发现电压大约在0~4.5v来回的变化,也就是说输出的峰值没变,有效值发生了变化,占空比越大,输出电压的有效值就会越小,可控电阻我没用过,但我觉得应该是由压降来控制它的阻值的,下面有个现成的程序,像我说的那样,自动的调节占空比,我采用的是atemega16单片机,程序如下:
#include<avr/io.h> #include<avr/interrupt.h>
#define uchar unsigned char #define uint unsigned int unsigned int count; void delay_ms(uint xms) { int i,j; for(i=0;i<xms;i++) for(j=0;j<1140;j++); } void port_init() { ddrb|=(1<<pb3); //pb3配置为输出(为1时用或符号|) portb&=(0<<pb3); //pb3输出0(为0时与符号&) } void timer0_init() { tccr0|=(1<<wgm01)|(1<<wgm00);//定时器0快速pwm模式 tccr0|=(1<<com01)|(1<<com00);//比较匹配发生时oc0a置位,计数到top时oc0清零 tccr0|=(1<<cs02)|(0<<cs01)|(1<<cs00); //定时器1024分频 ocr0=0; sei(); } void main(void) { port_init(); timer0_init(); while(1) { for(count=0;count<256;count++) //ocr=0时,led最亮,然后逐渐变暗 { ocr0=count; //比较匹配寄存器赋值 delay_ms(20); //延时一段时间,以观察效果 } //delay_ms(3000); // led最暗时,延时一段时间 for(count=255;count>0;count--) //ocr=255时,led最暗,然后逐渐变亮 { ocr0= count; delay_ms(20); } //delay_ms(3000); //led最亮时,延时一段时间 } }