脉冲宽度调制电路的制作

步骤1:说明
这个世界上的每个人都有一些惯性。每次通电时,电动机都会旋转。一旦关闭电源,它将趋于停止。但是它不会立即停止,需要一些时间。但是在它完全停止之前,它再次通电!因此,它开始运动。但是即使到现在,也要花一些时间才能达到最大速度。但是在它发生之前,它已经关闭电源,依此类推。因此,此动作的整体效果是电动机连续旋转,但转速较低。
脉冲宽度调制(pwm)是一种相对较新的功率切换技术,用于在完全打开和完全关闭水平。通常,数字脉冲具有相同的开启和关闭时间周期,但是在某些情况下,我们需要数字脉冲具有更多/更少的开启时间/关闭时间。在pwm技术中,我们创建具有不相等数量的导通和截止状态的数字脉冲,以获得所需的中间电压值。
占空比由一个完整数字脉冲中高电压持续时间的百分比定义。可以通过以下方式计算:
占空比的百分比= t/t(周期)x 100
让我们提出问题陈述。我们需要生成一个占空比为45%的50 hz pwm信号。
频率 = 50 hz
时间段,t = t(on)+ t(off)= 1/50 = 0.02 s = 20 ms
占空比 = 45%
因此,根据上述方程式求解,我们得到
t(on)= 9毫秒
t(off )= 11毫秒
步骤2:avr计时器-pwm模式
制作pwm时,avr包含单独的硬件!通过使用它,cpu指示硬件产生特定占空比的pwm。 atmega328具有6个pwm输出,其中2个位于定时器/计数器0(8位)上,2个位于定时器/计数器1(16位)上,2个位于定时器/计数器2(8位)上。定时器/计数器0是atmega328上最简单的pwm器件。定时器/计数器0可以在三种模式下运行:
快速pwm
相位和频率校正pwm
相位校正pwm
每个这些模式可以反转也可以不反转。
在pwm模式下初始化timer0:
tccr0a | =(1 《-设置wgm:快速pwm
tccr0a | =(1 《-设置比较输出模式a ,b
tccr0b | =(1 《-使用预分频器= 256设置计时器
:光强度测量-adc和ldr。
light依存电阻器(ldr)是一种传感器,当光落在其表面变化时会改变其电阻。
ldr由半导体材料制成,以使其具有光敏特性。这些ldr或光电电阻的工作原理是“光电导”。现在,该原理说的是,每当光落在ldr的表面上时(在这种情况下),元件的电导就会增加,换句话说,当光落在ldr的表面时,ldr的电阻会减小。由于它是表面上使用的半导体材料的特性,因此实现了ldr电阻降低的特性。 ldr通常用于检测光的存在或测量光的强度。
要将外部连续信息(模拟信息)传输到数字/计算系统中,必须将其转换为整数(数字)。 )值。此类转换由模数转换器(adc)进行。将模拟值转换为数字值的过程称为模拟到数字转换。简而言之,模拟信号是我们周围的真实世界信号,如声音和光。
数字信号是数字或数字格式的模拟等效项,微控制器等数字系统已经很好地理解了。 adc是一种可测量模拟信号并产生相同信号的数字等效信号的硬件。 avr微控制器具有内置的adc功能,可将模拟电压转换为整数。 avr将其转换为0到1023范围内的10位数字。
我们使用带有ldr的分压器电路的电压电平进行模数转换,以测量光强度。
初始化adc:
tadcsra | =(1 《-启用adc
adcsra | =(1 《-设置adc预分频器= 128
admux =(1 《-设置参考电压= avcc; -设置输入通道= adc0
观看视频,并详细介绍adc avr微控制器:avr微控制器。光强度测量。 adc和ldr
第4步:控制器直流电动机和双h桥电动机驱动器模块-l298n
我们使用直流电动机驱动器是因为微控制器通常不能提供不超过100毫安的电流。微控制器很聪明,但功能不强。该模块将为微控制器增加一些动力,以驱动大功率直流电动机。它可以同时控制2个直流电机,每个电机最多2安培,或者一个步进电机。我们可以使用pwm及其电机的旋转方向来控制速度。此外,它还用于驱动led胶带的亮度。
引脚说明:
out1 和 out2 端口,用于连接直流电动机。 out3 和 out4 用于连接 led胶带。
ena 和 enb 是启用引脚:通过将 ena 连接到高电平(+ 5v),可以启用端口 out1 和 out2 。
如果将 ena 引脚连接到低电平(gnd),则会禁用 out1 和 out2 。同样,对于 enb 和 out3 和 out4 。
in1 到 in4 是将连接到avr的输入引脚。
如果 in1 -高(+ 5v), in2 -低(gnd),则 out1 变高,并且 out2 变低,因此我们可以驱动电动机。
如果 in3 -高(+ 5v), in4 -低( gnd), out4 变高而 out3 变低,因此led胶带灯亮。
如果要反转电动机只是反转 in1 和 in2 极性,对于 in3 和 in4 也是如此。
将 pwm 信号应用于 ena 和 enb ,您可以控制两个不同输出端口上的电动机速度。
板可以接受从 7v 到 12v 的标称值。
跳线:共有三个跳线引脚; 跳线1 :如果您的电动机需要超过 12v 的电源,则必须断开跳线1 并施加所需的电压(最大 35v )在 12v 终端上。带上另一个 5v 电源,并在 5v 端子上输入。是的,如果您需要施加超过 12v 的电压(移除了 jumper 1 时),则必须输入 5v 。
5v 输入用于 ic 的正常运行,因为卸下跳线将禁用内置的 5v 稳压器并防止更高的输入来自 12v 端子的电压。
如果您的电源介于 7v 至 12v之间,则 5v 端子用作输出。 ,如果您施加的电压大于 12v ,则用作输入
,并且跳线被移除。
跳线2和跳线3:您必须移除这两个跳线,而必须输入来自微控制器的启用和禁用信号,大多数用户更喜欢移除这两个跳线并施加来自微控制器的信号。
如果您将这两个跳线保留为 out1 至 out4 将始终处于启用状态。记住 out1 和 out2 的 ena 跳线。 out3 和 out4 的 enb 跳线。
步骤5:用c语言编写程序代码。将hex文件上传到微控制器闪存中
使用集成开发平台-atmel studio以c代码编写和构建avr微控制器应用程序。
#ifndef f_cpu
#define f_cpu 16000000ul // telling controller crystal frequency (16 mhz avr atmega328p)
#endif
#include //header to enable data flow control over pins. defines pins, ports, etc.
#include //header to enable delay function in program
#define button1 2 // button switch connected to port b pin 2
#define debounce_time 25 // time to wait while “de-bouncing” button
#define lock_input_time 300 // time to wait after a button press
// timer0, pwm initialization
void timer0_init()
{
// set up timer oc0a,oc0b pin in toggle mode and ctc mode
tccr0a |= (1 《《 com0a1)|(1 《《 com0b1)|(1 《《 wgm00)|(1 《《 wgm01);
// set up timer with prescaler = 256
tccr0b |= (1 《《 cs02);
// initialize counter
tcnt0 = 0;
// initialize compare value
ocr0a = 0;
}
// adc initialization
void adc_init()
{
// enable adc, sampling freq=osc_freq/128 set prescaler to max value, 128
adcsra |= (1《
admux = (1《// select voltage reference (avcc)
// button switch status
unsigned char button_state()
{
/* the button is pressed when button1 bit is clear */
if (!(pinb & (1《
{
_delay_ms(debounce_time);
if (!(pinb & (1《
}
return 0;
}
// ports initialization
void port_init()
{
ddrb =0b00011011; //pb0-in1, pb1-in2,pb3-in3, pb4-in4, pb2 - button switch direct
portb=0b00010110;
ddrd =0b01100000; //pd5-enb (oc0b), pd6-ena (oc0a)
portd=0b00000000;
ddrc =0b00000000; // pc0-adc
portc=0b00000000; // set all pins of portc low which turns it off.
}
// this function reads the value of the analog to digital convert.
uint16_t get_lightlevel()
{
_delay_ms(10); // wait for some time for the channel to get selected
adcsra |= (1《 // start the adc conversion by setting adsc bit. write 1 to adsc
while(adcsra & (1《// wait for conversion to complete
// adsc becomes 0 again till then, run loop continuously
_delay_ms(10);
return(adc); // return the 10-bit result
}
// this function re-maps a number from one range (0-1023) to another (0-100)。
uint32_t map(uint32_t x, uint32_t in_min, uint32_t in_max, uint32_t out_min, uint32_t out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
int main(void)
{
uint16_t i1=0;
port_init();
timer0_init();
adc_init(); // initialization adc
while (1)
{
i1=map(get_lightlevel(),0,1023,0,100);
ocr0a=i1; // set output compare register channel a
ocr0b=100-i1; // set output compare register channel b (inverted)
if (button_state()) // if the button is pressed, toggle the led‘s state and delay for 300ms (#define lock_input_time)
{
portb ^= (1《《0); // toggling the current state of the pin in1.
portb ^= (1《《1); // toggling the current state of the pin in2. reverse the rotational direction of the motor
portb ^= (1《《3); // toggling the current state of the pin in3.
portb ^= (1《《4); // toggling the current state of the pin in4. led tape is turn off/on.
_delay_ms(lock_input_time);
}
};
return (0);
}
编程完成了。接下来,将项目代码构建并编译到十六进制文件中。
将hex文件上传到微控制器闪存中:
在dos提示符窗口中键入以下命令:
avrdude –c [程序员名称] –p m328p –u –u flash:w:[您的十六进制文件的名称]
在我的情况下是:
avrdude –c ispprogv1 –p m328p –u –u flash:w:pwm.hex
此命令将十六进制文件写入微控制器的内存。观看视频,详细介绍微控制器闪存的刻录:微控制器闪存的刻录。..
好!现在,微控制器按照我们程序的指令工作。让我们检查一下!
步骤6:电路
根据原理图连接组件
插入电源,并且可以正常工作!

台积电将释放更多产能为支持索尼提高PS5的产能
VR/AR技术将全方位重塑人们的日常生活
使用Cumulus 4.4实现创新、先进功能和扩展增强功能
Linux:测试进程占用的虚拟内存大小
什么是PPTC自复保险丝?
脉冲宽度调制电路的制作
数字化远程管理:探索Lora网关在数字工厂中的应用
2008墨西哥汽配展/法兰克福汽配展/法兰克福(墨西哥)国际
基于Python 异常的介绍以及异常处理的方法解析
三星S8刚出,三星Note8概念图又出来了,继续领跑
三相电与单相电有何差别?三相电功率如何测量以及计算?
高通TD-LTE芯片高额权利金吓跑中国手机大厂
小米6最新消息:首轮预售秒空后现身闲鱼,抢购不到小米6,不如选择MIX!
比亚迪进军钠电池!生产基地正式落定
EM4095读取EM4100波形图和电路图
光学式、磁式和电容式三种编码器对比
通过物联网网关实现抛光设备数据采集远程监控
PCB设计中单板上时钟需要注意的事项
全新德系七座,长5米1,V6配四驱,30万果断放弃汉兰达
利用SD存储介质扩展MAXQ2000的非易失性数据存储空间