初级会员

- 积分
- 178
- 金钱
- 178
- 注册时间
- 2013-4-18
- 在线时间
- 0 小时
|

楼主 |
发表于 2013-6-4 10:13:36
|
显示全部楼层
回复【4楼】正点原子:
---------------------------------
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "timer.h"
#include "adc.h"
#include "LCD.h"
//Mini STM32开发板范例代码13
//ADC 实验
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
int main(void)
{
u16 adcx;
u16 ccr=225;
u8 i;
float temp;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init();
Adc_Init();
PWM_Init(900,4);
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"ADC-PWM TEST");
LCD_ShowString(60,90,"ATOM@ALIENTEK");
LCD_ShowString(60,110,"2013/6/3");
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,130,"ADC_CH0_VAL:");
LCD_ShowString(60,150,"ADC_CH0_VOL:0.000V");
while(1)
{
adcx=Get_Adc(ADC_CH0);
TIM3->CCR2=ccr;
LCD_ShowNum(156,130,adcx,4,16);//显示ADC的值
temp=(float)adcx*(3.3/4096);
adcx=temp;
LCD_ShowNum(156,150,adcx,1,16);//显示电压值
if(adcx<20)
{
ccr++;
if(ccr==450)
{
for(i=1;i<450;i++)
{
ccr--;
delay_ms(10);
}
}
}
if(adcx>20)
{
ccr--;
}
if(adcx==20)
{
ccr=ccr;
}
LCD_ShowNum(156,150,adcx,1,16);
temp-=adcx;
temp*=1000;
LCD_ShowNum(172,150,temp,3,16);
delay_ms(10);
}
}
原子哥你看,这是主程序(采样电压为3.3V),按代码的意思应该PWM波占空比先增大,当到0.5时,进入FOR循环占空比自减。我用示波器测量后,发现占空比从1减到0.5.然后维持在0.5不动了。这是什么原因啊?根本就不是按着程序来走,况且占空比的初始值应该是0.25才是,怎么会跑到1呢? |
|