OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6140|回复: 9

用ADC转化来控制占空比,程序可以运行,但是输出的占空比非设计的代码意思,

[复制链接]

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
发表于 2013-6-3 20:25:05 | 显示全部楼层 |阅读模式
原子哥,麻烦看一下这个代码为什么输出PWM波的占空比不是按代码的意思。

程序:ADC转换的结果和基准电压比较(20V),如果采样电压小于基准电压则增大占空比;若采样电压大于基准电压则减小占空比。
但是我用示波器测量了PWM波的输出,刚开始出来时为设置的初始占空比,之后PWM波的占空比一直增大,到占空比为1(输出高电平)之后占空比就没有变化了,这是为什么呀?
求各路大神解答。程序在附件




AD控制占空比.zip

595.49 KB, 下载次数: 293

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-3 20:54:01 | 显示全部楼层
你觉得问题出在哪里?自己分析下先.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-6-3 23:03:58 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
因为我在代码里同时设置了占空比的提高和下降。
我对代码进行修改过,如下:
if(adcx<20)
{
ccr++;
if(ccr==450)
{
ccr--;
}
}
因为我给的输入测量值实际上是单片机上的3.3V,说明adcx<20,程序应该会安着上面写的代码在走(PWM占空比应该是有提高然后再减小,这么个循环过程)。但是这次的实验依然一样,占空比只有提高。所以到现在我还没想出来错哪了。原子哥请正面回答啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-3 23:27:42 | 显示全部楼层
ccr==450才会减去1...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-6-4 09:12:06 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
哦,对。如果按着上面的代码来走的话,代码会维持在ccr=450(占空比0.5)的PWM波。这样的话,我的代码是没有问题的。如果我想让占空比自减的话,应该是如下设置:
if(adcx<20) 

ccr++; 
if(ccr==450) 

for(i=1,i<450,i++)
{
ccr--;
}

}
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
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呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-4 10:17:26 | 显示全部楼层
仿真下吧.纯软件问题.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-6-4 10:45:33 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
我用软件仿真了,给adcx=3.3;出来的情况给实际测量的一样啊。原子哥给点提示啊,该怎么改才好?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-4 13:01:57 | 显示全部楼层
回复【8楼】大书事:
---------------------------------
硬件仿真.你看看是哪个判断出问题了.
单步跟踪就可以看出来.多循环几次.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-6-6 16:11:26 | 显示全部楼层
回复【9楼】正点原子:
---------------------------------
啊,改了我一整天。原来是变量值给的太小。程序执行到后面变量就不起作用了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 22:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表