/*********************************************************/
//一般说明
//TLC5620 串行通信
//定时器控制其3路正弦波输出频率
/*********************************************************/
#include //用于调试子程序
/*********************************************************/
//TLC5620的核心子程序
/*********************************************************/
#define uint unsigned int
#define uchar unsigned char
#define STC5620_A 0 //通道A,增益0 由于先写高位所以已经做过左移5位处理
#define STC5620_B 64 //通道B,增益0
#define STC5620_C 128 //通道B,增益0
sbit STC5620_LDAC=P3^2; //定义TLC5620与单片机的接口
sbit STC5620_LOAD=P3^3;
sbit STC5620_CLK=P3^5;
sbit STC5620_DATA=P3^4;
uchar code DAC_SIN[100]={128,136,144,152,160,168,175,182,190,197,
203,210,216,221,227,232,236,240,244,247,
250,252,254,255,255,255,255,255,254,252,
250,247,244,240,236,232,227,221,216,210,
203,197,190,182,175,168,160,152,144,136,
128,120,112,104,96, 88, 81, 74, 66, 59,
53, 46, 40, 35, 29, 24, 20, 16, 12, 9,
6, 4, 2, 1, 0, 0, 0, 1, 2, 4,
6, 9, 12, 16, 20, 24, 29, 35, 40, 46,
53, 59, 66, 74, 81, 88, 96, 104,112,120,
}; //对正弦波采100个样点
void STC5620_write_com(uchar channel,uchar vol) // 选通道,写输出电压命令
{
uchar i;
STC5620_LDAC=1;
STC5620_LOAD=1; //总线拉高准备写入
for(i=0;i<3;i++) //写入选择通道命令,其中默认了增益为1
{
STC5620_DATA=(bit)(channel&0x80);
STC5620_CLK=1; //下降沿锁存数据
STC5620_CLK=0;
channel<<=1 ;
}
for(i=0;i<8;i++) //写入输出电压命令
{
STC5620_DATA=(bit)(vol&0x80);
STC5620_CLK=1; //下降写数据入串口缓冲器
STC5620_CLK=0;
vol<<=1;
}
STC5620_LOAD=0; //下降沿写串口缓冲器入通道指定的中间缓冲器
STC5620_LDAC=0; //下降沿写中间缓冲器入通道对应的输出缓冲器
}
void STC5620_sin(void)
{
static uchar ii=0,jj=33,kk=66; //总点数为100个点,可以用于设定相位差
//定义静态变量 每次更新上次值
{
STC5620_write_com(STC5620_A,DAC_SIN[ii]);
ii=ii+2; //控制通道A采样点数
if(ii>99) ii=0;
STC5620_write_com(STC5620_B,DAC_SIN[jj]);
jj=jj+2; //控制通道B采样点数
if(jj>99) jj=0;
STC5620_write_com(STC5620_C,DAC_SIN[kk]);
kk=kk+2; //控制通道C采样点数
if(kk>99) kk=0;
}
}
/*********************************************************/
//设置定时中断控制TLC5620输出正弦波的频率
/*********************************************************/
void Init_T0(void)
{
EA=1;
ET0=1;
TMOD=0x02; //自动装载计数
TR0=1;
TL0=TH0=256-90; //设置频率 具体使用时计算出参数后再幅值
//频率计算公式a:计数个数;p:晶振频率;b:取样点数;则在单片机12分频工作模式情况下频率=p/(12ab)
//此时频率为
}
void time0() interrupt 1
{
STC5620_sin();
}
/*********************************************************/
//主函数
/*********************************************************/
void main()
{
Init_T0(); //初始化定时器
while(1); //等待中断
}
关键字:TLC5620 频率可调 三相正弦信号
引用地址:TLC5620产生频率可调三相正弦信号
//一般说明
//TLC5620 串行通信
//定时器控制其3路正弦波输出频率
/*********************************************************/
#include
/*********************************************************/
//TLC5620的核心子程序
/*********************************************************/
#define uint unsigned int
#define uchar unsigned char
#define STC5620_A 0 //通道A,增益0 由于先写高位所以已经做过左移5位处理
#define STC5620_B 64 //通道B,增益0
#define STC5620_C 128 //通道B,增益0
sbit STC5620_LDAC=P3^2; //定义TLC5620与单片机的接口
sbit STC5620_LOAD=P3^3;
sbit STC5620_CLK=P3^5;
sbit STC5620_DATA=P3^4;
uchar code DAC_SIN[100]={128,136,144,152,160,168,175,182,190,197,
203,210,216,221,227,232,236,240,244,247,
250,252,254,255,255,255,255,255,254,252,
250,247,244,240,236,232,227,221,216,210,
203,197,190,182,175,168,160,152,144,136,
128,120,112,104,96, 88, 81, 74, 66, 59,
53, 46, 40, 35, 29, 24, 20, 16, 12, 9,
6, 4, 2, 1, 0, 0, 0, 1, 2, 4,
6, 9, 12, 16, 20, 24, 29, 35, 40, 46,
53, 59, 66, 74, 81, 88, 96, 104,112,120,
}; //对正弦波采100个样点
void STC5620_write_com(uchar channel,uchar vol) // 选通道,写输出电压命令
{
uchar i;
STC5620_LDAC=1;
STC5620_LOAD=1; //总线拉高准备写入
for(i=0;i<3;i++) //写入选择通道命令,其中默认了增益为1
{
STC5620_DATA=(bit)(channel&0x80);
STC5620_CLK=1; //下降沿锁存数据
STC5620_CLK=0;
channel<<=1 ;
}
for(i=0;i<8;i++) //写入输出电压命令
{
STC5620_DATA=(bit)(vol&0x80);
STC5620_CLK=1; //下降写数据入串口缓冲器
STC5620_CLK=0;
vol<<=1;
}
STC5620_LOAD=0; //下降沿写串口缓冲器入通道指定的中间缓冲器
STC5620_LDAC=0; //下降沿写中间缓冲器入通道对应的输出缓冲器
}
void STC5620_sin(void)
{
static uchar ii=0,jj=33,kk=66; //总点数为100个点,可以用于设定相位差
//定义静态变量 每次更新上次值
{
STC5620_write_com(STC5620_A,DAC_SIN[ii]);
ii=ii+2; //控制通道A采样点数
if(ii>99) ii=0;
STC5620_write_com(STC5620_B,DAC_SIN[jj]);
jj=jj+2; //控制通道B采样点数
if(jj>99) jj=0;
STC5620_write_com(STC5620_C,DAC_SIN[kk]);
kk=kk+2; //控制通道C采样点数
if(kk>99) kk=0;
}
}
/*********************************************************/
//设置定时中断控制TLC5620输出正弦波的频率
/*********************************************************/
void Init_T0(void)
{
EA=1;
ET0=1;
TMOD=0x02; //自动装载计数
TR0=1;
TL0=TH0=256-90; //设置频率 具体使用时计算出参数后再幅值
//频率计算公式a:计数个数;p:晶振频率;b:取样点数;则在单片机12分频工作模式情况下频率=p/(12ab)
//此时频率为
}
void time0() interrupt 1
{
STC5620_sin();
}
/*********************************************************/
//主函数
/*********************************************************/
void main()
{
Init_T0(); //初始化定时器
while(1); //等待中断
}
推荐阅读最新更新时间:2024-03-16 13:05
STM32一个Timer输出4路不同频率、可调占空比的PWM
main.c /********************************************* 标题:操作USART的练习 软件平台:MDK-ARM Standard Version4.70 硬件平台:stm32f4-discovery 主频:168M Periph_Driver_version: V1.0.0 描述:用一个定时器(TIM3),实现四路不同频率、占空比可调的PWM 代码参考自STM32F4-Discovery_FW_V1.1.0\Project\Peripheral_Examples\TIM_TimeBase author:大舟 data:2013-04-13
[单片机]
基于HPWM技术的大功率正弦超声波逆变电源
1 引 言 大功率超声波装置除用于工业清洗外,还在医疗、军事、石油换能器技术,以及海洋探测与开发、减噪防振系统、智能机器人、波动采油等高技术领域有着广泛的应用前景 。超声波装置由超声波逆变电源和换能器组成。近年来,由于新型稀土功能材料的开发和研制成功,使制造大功率超声波换能器成为可能,但与之配套的高频正弦逆变电源产品尚为少见。目前,市场上的大功率正弦逆变电源均为采用IGBT制成的中低频产品 ,而高频逆变电源大多数是方波电源或占空比可调的脉冲逆变电源。因此,高频大功率正弦逆变电源已成为超声波应用的瓶颈,使得对该电源的研制已成为急待解决的问题。这里,应用混合脉宽调制(Hybrid Pulse Width Modulation,H
[应用]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况
更多往期活动
11月16日历史上的今天
厂商技术中心