OpenEdv-开源电子网

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

输出PWM波时幅值电压只有400mv。什么情况?

[复制链接]

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
发表于 2013-4-30 20:50:26 | 显示全部楼层 |阅读模式
输出PWM波时幅值电压只有400mv。什么情况?求大神留答
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-4-30 21:31:42 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
不接负载,信号从单片机出来就直接接入到示波器中了啊。什么情况?
回复 支持 反对

使用道具 举报

2

主题

14

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2012-5-18
在线时间
0 小时
发表于 2013-4-30 22:38:44 | 显示全部楼层
回复【3楼】大书事:
---------------------------------
上代码和原理图
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-4-30 23:01:07 | 显示全部楼层
#include <stm32f10x_lib.h>
#include "timer.h"
void WM_Init(u16 arr1,u16 psc1,u16 arr2,u16 psc2,u16 ccr1,u16 ccr2,u16 ccr3,u16 ccr4, u16 ccr5)
{    
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<1;       //TIM3时钟使能

RCC->APB1ENR|=1<<0;

RCC->APB2ENR|=1<<2;
RCC->APB2ENR|=1<<3;    

GPIOA->CRL&=0X00FFFFFF;//PA7输出
GPIOA->CRL|=0XBB000000;//复用功能输出    
GPIOA->ODR|=1<<7;//PA7上拉
GPIOA->ODR|=1<<6;

GPIOA->CRL&=0XFFFFFF0F;   
GPIOA->CRL|=0X000000B0;
GPIOA->ODR|=1<<1;


GPIOB->CRL&=0XFFFFFF00;
GPIOB->CRL|=0X000000BB;
GPIOB->ODR|=1<<1;
GPIOB->ODR|=1<<0;


TIM3->ARR=arr1-1;//设定计数器自动重装值 
TIM3->SC=psc1;//预分频器不分频
TIM2->ARR=arr2-1;
TIM2->SC=psc2;

TIM3->CCMR1|=7<<12;  //CH2 WM2模式  
TIM3->CCMR1|=1<<11; //CH2预装载使能
TIM3->CCMR1|=7<<4;
TIM3->CCMR1|=1<<3;
TIM3->CCMR2|=6<<12;
TIM3->CCMR2|=1<<11;
TIM3->CCMR2|=6<<4;
TIM3->CCMR2|=1<<3;

TIM2->CCMR1|=7<<12;
TIM2->CCMR1|=1<<11;
   
TIM3->CR1&=0<<4;
TIM3->CCER|=1<<4;   //OC2 输出使能
TIM3->CCER|=1<<0;
TIM3->CCER|=1<<8;
TIM3->CCER|=1<<12; 
TIM2->CR1&=0<<4;
TIM2->CCER|=1<<4;

TIM3->BDTR|=1<<15;  //开启OC和OCN输

TIM2->BDTR|=1<<15;

TIM3->CCR1=ccr1; //设定占空比
    TIM3->CCR2=ccr2;
    TIM3->CCR3=ccr3;
    TIM3->CCR4=ccr4;

TIM2->CCR2=ccr5;
 
    TIM3->EGR|=1<<0;    //重新初始化计数器
TIM2->EGR|=1<<0;

TIM3->CR1=0x80;   //ARPE使能 
TIM3->CR1|=0x01;    //使能定时器3 
TIM2->CR1=0X80;
TIM2->CR1|=0X01;   
}    

下面是主函数

 #include <stm32f10x_lib.h>
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "timer.h"
#include "stdio.h"    
int main(void)
{
  Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);      //延时初始化
uart_init(72,9600);  //串口初始化 
PWM_Init(9000,160,9000,0,4500,4500,4500,4500,4500);

}


程序设计TIM3输出50HZ的四路PWM波,TIM2输出8KHZ的PWM波。原子哥看看为什么会幅值只有500mv??
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-4-30 23:04:59 | 显示全部楼层
回复【4楼】zhuyl456:
---------------------------------
#include <stm32f10x_lib.h> 
#include "timer.h" 
void WM_Init(u16 arr1,u16 psc1,u16 arr2,u16 psc2,u16 ccr1,u16 ccr2,u16 ccr3,u16 ccr4, u16 ccr5) 
{       
//此部分需手动修改IO口设置 
RCC->APB1ENR|=1<<1;       //TIM3时钟使能 

RCC->APB1ENR|=1<<0; 

RCC->APB2ENR|=1<<2; 
RCC->APB2ENR|=1<<3;     

GPIOA->CRL&=0X00FFFFFF;//PA7输出 
GPIOA->CRL|=0XBB000000;//复用功能输出     
GPIOA->ODR|=1<<7;//PA7上拉 
GPIOA->ODR|=1<<6; 

GPIOA->CRL&=0XFFFFFF0F;     
GPIOA->CRL|=0X000000B0; 
GPIOA->ODR|=1<<1; 


GPIOB->CRL&=0XFFFFFF00; 
GPIOB->CRL|=0X000000BB; 
GPIOB->ODR|=1<<1; 
GPIOB->ODR|=1<<0; 


TIM3->ARR=arr1-1;//设定计数器自动重装值  
TIM3->SC=psc1;//预分频器不分频 
TIM2->ARR=arr2-1; 
TIM2->SC=psc2; 

TIM3->CCMR1|=7<<12;  //CH2 WM2模式    
TIM3->CCMR1|=1<<11; //CH2预装载使能 
TIM3->CCMR1|=7<<4; 
TIM3->CCMR1|=1<<3; 
TIM3->CCMR2|=6<<12; 
TIM3->CCMR2|=1<<11; 
TIM3->CCMR2|=6<<4; 
TIM3->CCMR2|=1<<3; 

TIM2->CCMR1|=7<<12; 
TIM2->CCMR1|=1<<11; 
    
TIM3->CR1&=0<<4; 
TIM3->CCER|=1<<4;   //OC2 输出使能
TIM3->CCER|=1<<0; 
TIM3->CCER|=1<<8; 
TIM3->CCER|=1<<12;  
TIM2->CR1&=0<<4; 
TIM2->CCER|=1<<4; 

TIM3->BDTR|=1<<15;  //开启OC和OCN输 

TIM2->BDTR|=1<<15; 

TIM3->CCR1=ccr1; //设定占空比 
    TIM3->CCR2=ccr2; 
    TIM3->CCR3=ccr3; 
    TIM3->CCR4=ccr4; 

TIM2->CCR2=ccr5; 
  
    TIM3->EGR|=1<<0;    //重新初始化计数器 
TIM2->EGR|=1<<0;

TIM3->CR1=0x80;   //ARPE使能  
TIM3->CR1|=0x01;    //使能定时器3  
TIM2->CR1=0X80;
TIM2->CR1|=0X01;     
}     

下面是主函数 

 #include <stm32f10x_lib.h> 
#include "sys.h" 
#include "usart.h"
#include "delay.h"
#include "timer.h" 
#include "stdio.h"     
int main(void) 
{
  Stm32_Clock_Init(9); //系统时钟设置 
delay_init(72);      //延时初始化 
uart_init(72,9600);  //串口初始化  
PWM_Init(9000,160,9000,0,4500,4500,4500,4500,4500); 




程序设计TIM3输出50HZ的四路PWM波,TIM2输出8KHZ的PWM波。原子哥看看为什么会幅值只有500mv??
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-4-30 23:05:14 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
#include <stm32f10x_lib.h> 
#include "timer.h" 
void WM_Init(u16 arr1,u16 psc1,u16 arr2,u16 psc2,u16 ccr1,u16 ccr2,u16 ccr3,u16 ccr4, u16 ccr5) 
{       
//此部分需手动修改IO口设置 
RCC->APB1ENR|=1<<1;       //TIM3时钟使能 

RCC->APB1ENR|=1<<0; 

RCC->APB2ENR|=1<<2; 
RCC->APB2ENR|=1<<3;     

GPIOA->CRL&=0X00FFFFFF;//PA7输出 
GPIOA->CRL|=0XBB000000;//复用功能输出     
GPIOA->ODR|=1<<7;//PA7上拉 
GPIOA->ODR|=1<<6; 

GPIOA->CRL&=0XFFFFFF0F;     
GPIOA->CRL|=0X000000B0; 
GPIOA->ODR|=1<<1; 


GPIOB->CRL&=0XFFFFFF00; 
GPIOB->CRL|=0X000000BB; 
GPIOB->ODR|=1<<1; 
GPIOB->ODR|=1<<0; 


TIM3->ARR=arr1-1;//设定计数器自动重装值  
TIM3->SC=psc1;//预分频器不分频 
TIM2->ARR=arr2-1; 
TIM2->SC=psc2; 

TIM3->CCMR1|=7<<12;  //CH2 WM2模式    
TIM3->CCMR1|=1<<11; //CH2预装载使能 
TIM3->CCMR1|=7<<4; 
TIM3->CCMR1|=1<<3; 
TIM3->CCMR2|=6<<12; 
TIM3->CCMR2|=1<<11; 
TIM3->CCMR2|=6<<4; 
TIM3->CCMR2|=1<<3; 

TIM2->CCMR1|=7<<12; 
TIM2->CCMR1|=1<<11; 
    
TIM3->CR1&=0<<4; 
TIM3->CCER|=1<<4;   //OC2 输出使能
TIM3->CCER|=1<<0; 
TIM3->CCER|=1<<8; 
TIM3->CCER|=1<<12;  
TIM2->CR1&=0<<4; 
TIM2->CCER|=1<<4; 

TIM3->BDTR|=1<<15;  //开启OC和OCN输 

TIM2->BDTR|=1<<15; 

TIM3->CCR1=ccr1; //设定占空比 
    TIM3->CCR2=ccr2; 
    TIM3->CCR3=ccr3; 
    TIM3->CCR4=ccr4; 

TIM2->CCR2=ccr5; 
  
    TIM3->EGR|=1<<0;    //重新初始化计数器 
TIM2->EGR|=1<<0;

TIM3->CR1=0x80;   //ARPE使能  
TIM3->CR1|=0x01;    //使能定时器3  
TIM2->CR1=0X80;
TIM2->CR1|=0X01;     
}     

下面是主函数 

 #include <stm32f10x_lib.h> 
#include "sys.h" 
#include "usart.h"
#include "delay.h"
#include "timer.h" 
#include "stdio.h"     
int main(void) 
{
  Stm32_Clock_Init(9); //系统时钟设置 
delay_init(72);      //延时初始化 
uart_init(72,9600);  //串口初始化  
PWM_Init(9000,160,9000,0,4500,4500,4500,4500,4500); 




程序设计TIM3输出50HZ的四路PWM波,TIM2输出8KHZ的PWM波。原子哥看看为什么会幅值只有500mv??
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-30 23:27:39 | 显示全部楼层
回复【7楼】大书事:
---------------------------------
你这代码也是一绝啊....

居然没有死循环....
你代码咋跑的?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

20

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2013-4-18
在线时间
0 小时
 楼主| 发表于 2013-5-1 09:52:01 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
代码能运行啊,在uvision仿真软件上输出的波形也正常
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-1 10:13:16 | 显示全部楼层
在main函数的最后,加上死循环!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

243

主题

429

帖子

0

精华

禁止发言

积分
1067
金钱
1067
注册时间
2011-12-23
在线时间
17 小时
发表于 2013-5-1 16:46:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-20 18:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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