脉冲宽度调制电路的制作

电子说

1.3w人已加入

描述

步骤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:电路

脉冲宽度调制

脉冲宽度调制

根据原理图连接组件

插入电源,并且可以正常工作!

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分