-
为什么AD5328没有输出电压
#ifndef __SPI1_H #define __SPI1_H #include "gd32f4xx.h" /* 时钟使能宏定义 */ #define SPIx SPI1 #define SPIx_CLK_ENABLE() rcu_periph_clock_enable(RCU_SPI1) #define SPIx_SCK_GPIO_CLK_ENABLE() rcu_periph_clock_enable(RCU_GPIOB) #define SPIx_MISO_GPIO_CLK_ENABLE() rcu_periph_clock_enable(RCU_GPIOB) #define SPIx_MOSI_GPIO_CLK_ENABLE() rcu_periph_clock_enable(RCU_GPIOB) #define SPIx_CS_GPIO_CLK_ENABLE() rcu_periph_clock_enable(RCU_GPIOB) #define LDAC_GPIO_CLK_ENABLE() rcu_periph_clock_enable(RCU_GPIOB) /* SPIx 引脚定义 */ #define SPIx_SCK_PIN GPIO_PIN_13 #define SPIx_SCK_GPIO_PORT GPIOB #define SPIx_MOSI_PIN GPIO_PIN_15 #define SPIx_MOSI_GPIO_PORT GPIOB #define AD5328_CS_PIN GPIO_PIN_12 #define AD5328_CS_GPIO_PORT GPIOB // AD5328 的 LDAC 引脚 #define AD5328_LDAC_PIN GPIO_PIN_14 #define AD5328_LDAC_GPIO_PORT GPIOB #define AD5328_LDAC_PIN GPIO_PIN_14 #define AD5328_LDAC_GPIO_PORT GPIOB #define digitalHi(p,i) {gpio_bit_set(p, i);} // 设置为高电平 #define digitalLo(p,i) {gpio_bit_reset(p, i);} // 设置为低电平 #define SPI_AD5328_CS_LOW() digitalLo(AD5328_CS_GPIO_PORT, AD5328_CS_PIN) #define SPI_AD5328_CS_HIGH() digitalHi(AD5328_CS_GPIO_PORT, AD5328_CS_PIN) #define AD5328_LDAC_LOW() digitalLo(AD5328_LDAC_GPIO_PORT, AD5328_LDAC_PIN) #define AD5328_LDAC_HIGH() digitalHi(AD5328_LDAC_GPIO_PORT, AD5328_LDAC_PIN) void SPI1_Init(void);//SPI1初始化 void Write_Byte(unsigned int Data);//SPI1写数据 void SPI1_Write_Data(unsigned char Channel,unsigned int Tdata);//写数据 void AD5328_Init(); //AD5328初始化 void SPWM_Out_DAValue(unsigned char Channel,unsigned int Dim_Vlaue); #endif /* __SPI1_H */ #include "gd32f4xx.h" #include "main.h" #include "systick.h" unsigned int RST = 0xE000; unsigned int Buff_SET = 0x8000; unsigned int POWER_DOWN = 0xC000; unsigned int LOCK_MODE_Updata = 0xA001; void AD5328_Init(void)//AD5328初始化 { Write_Byte(RST);//复位芯片 delay_1ms(1);//延时1ms Write_Byte(Buff_SET); //设置缓冲模式 Write_Byte(POWER_DOWN);//关闭功耗模式 Write_Byte(LOCK_MODE_Updata);//单次更新模式 } void SPI1_Init(void)//SPI1初始化 { spi_parameter_struct spi_init_struct;//SPI参数结构体 /* 使能外设和GPIO时钟 */ SPIx_SCK_GPIO_CLK_ENABLE(); SPIx_MOSI_GPIO_CLK_ENABLE(); SPIx_CS_GPIO_CLK_ENABLE(); SPIx_CLK_ENABLE(); LDAC_GPIO_CLK_ENABLE(); /* 配置 SPI SCK GPIO 引脚 */ gpio_mode_set(SPIx_SCK_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, SPIx_SCK_PIN); gpio_output_options_set(SPIx_SCK_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, SPIx_SCK_PIN); gpio_af_set(SPIx_SCK_GPIO_PORT, GPIO_AF_5, SPIx_SCK_PIN); // 设置为 AF5 用于 SPI1 /* 配置 SPI MOSI GPIO 引脚 */ gpio_mode_set(SPIx_MOSI_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_PULLUP, SPIx_MOSI_PIN); gpio_output_options_set(SPIx_MOSI_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, SPIx_MOSI_PIN); gpio_af_set(SPIx_MOSI_GPIO_PORT, GPIO_AF_5, SPIx_MOSI_PIN); // 设置为 AF5 用于 SPI1 /* 配置 CS 引脚 */ gpio_mode_set(AD5328_CS_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, AD5328_CS_PIN); gpio_output_options_set(AD5328_CS_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, AD5328_CS_PIN); //gpio_af_set(AD5328_CS_GPIO_PORT, GPIO_AF_5, AD5328_CS_PIN); // 设置为 AF5 用于 SPI1 /* 配置 LDAC 引脚 */ gpio_mode_set(AD5328_LDAC_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, AD5328_LDAC_PIN); gpio_output_options_set(AD5328_LDAC_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, AD5328_LDAC_PIN); /* SPI 配置 */ spi_init_struct.trans_mode = SPI_TRANSMODE_BDTRANSMIT;//半双工模式 spi_init_struct.device_mode = SPI_MASTER;//主机模式 spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;//8位帧 spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;//时钟极性低,第二个边沿采样 spi_init_struct.nss = SPI_NSS_SOFT;//软件控制NSS spi_init_struct.prescale = SPI_PSC_4;//预分频256 spi_init_struct.endian = SPI_ENDIAN_MSB;//高位在前 spi_init(SPIx, &spi_init_struct); // spi_bidirectional_line_config() spi_enable(SPIx); } unsigned char SPI_Buff[4] = {0}; void Write_Byte(unsigned int Data)//SPI1写数据 { SPI_AD5328_CS_LOW();//NSS拉低 SPI_Buff[0] = (unsigned char)(Data>>8); //高位 SPI_Buff[1] = (unsigned char)(Data);//低位 while (RESET == spi_i2s_flag_get(SPIx, SPI_FLAG_TBE));// 等待发送缓冲区空闲 spi_i2s_data_transmit(SPIx, SPI_Buff[0]); while (RESET == spi_i2s_flag_get(SPIx, SPI_FLAG_TBE));// 等待发送缓冲区空闲 spi_i2s_data_transmit(SPIx, SPI_Buff[1]); SPI_AD5328_CS_HIGH();//NSS拉高 } unsigned int sdata =0; void SPI1_Write_Data(unsigned char Channel,unsigned int Tdata)//写入数据 { SPI_AD5328_CS_LOW();//NSS拉低 sdata = (Channel<<12) | (Tdata & 0x0FFF);//设置数据位 sdata = sdata & 0x7FFF;//去掉最高位的1 SPI_Buff[0] = (unsigned char)(sdata>>8); //高位 SPI_Buff[1] = (unsigned char)(sdata);//低位 while (RESET == spi_i2s_flag_get(SPIx, SPI_FLAG_TBE));//等待空闲位 spi_i2s_data_transmit(SPIx, SPI_Buff[0]); while (RESET == spi_i2s_flag_get(SPIx, SPI_FLAG_TBE));//等待空闲位 spi_i2s_data_transmit(SPIx, SPI_Buff[1]); SPI_AD5328_CS_HIGH();//NSS拉高 } unsigned int REF_AD_Value = 0;//AD采样值 unsigned int DA_Value = 0;//DAC输出值 double FDA_Value = 0;//DAC输出值(浮点数) ///////////////////////////////// //Channel:通道选择,0~7 //Dim_Vlaue:亮度值,0~5000 //////////////////////////////// void SPWM_Out_DAValue(unsigned char Channel,unsigned int Dim_Vlaue)//SPWM输出DAC值 { if(Dim_Vlaue <= 4998)//0-5V { FDA_Value = (double)Dim_Vlaue/5000;//DAC输出值(浮点数) DA_Value = FDA_Value*4096;//DAC输出值(整数) }else { DA_Value = 4095;//最大值 } SPI1_Write_Data(Channel,Dim_Vlaue);//写入数据 }
1916浏览量 1回复量 关注量 -
IO口带载能力检测 赏200家园币
如何对推挽式输出和开漏型输出的IO口带载能力进行检测?要求驱动能力不小于2mA?在2mA的负载情况下,输出电压不大于0.4V。
15524浏览量 10回复量 关注量 -
HK32F103VET6 DAC1 输出电压异常问题 sos
void DAC_Configuration(void) { DAC_InitTypeDef DAC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; // GPIO_Init(GPIOA, &GPIO_InitStructure); //A¶Ë¿Ú //DAC_DeInit(); // DAC_Cmd(DAC_Channel_1,ENABLE); // DAC_StructInit(&DAC_InitStructure);//½«DAC_StructµÄÖµÉèΪĬÈÏ DAC_InitStructure.DAC_Trigger=DAC_Trigger_Software;//ÓÉÈí¼þ´¥·¢ DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;//¹Ø±Õ²¨ÐÎÉú³É DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_TriangleAmplitude_4095; DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Enable;//ʹÄÜDACͨµÀ»º´æ DAC_Init(DAC_Channel_1,&DAC_InitStructure); /* Enable DAC Channel1 */ DAC_Cmd(DAC_Channel_1, ENABLE); DAC_SetChannel1Data(DAC_Align_12b_R,4085); DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); while(1) { DAC_SetChannel1Data(DAC_Align_12b_R,4085); DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE); } 源代码如上,输出电压不对,试过其他数值也不对,代码之前是用在ST上的
2230浏览量 0回复量 关注量 -
[小白求助]关于开关电源效率的疑惑。
在设计开关电源时,通常设定输入和输出的规格,比如输入电压375V,输出电压为15V,输出电流为20A,输出功率自然为300W,可是效率是输出功率与输入功率的比值,输入只知道输入电压,所以怎么得到效率。 是不是得用功率表对具体电源进行测量?
3656浏览量 4回复量 关注量 -
DCDC中的峰值检测问题
[color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]大侠,我在学习开关电源峰值电流检测模式,有一个问题不能理解,能否帮忙解答[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]在峰值电流检测里,检测的电流值与输出电压与参考电压经过误差放大器产生的Vc比较来决定占空比大小。我的问题是对于同养的输入输出电压,占空比是固定的,也就是Vc应该不变(稳态),但是在不同负载电流(稳态)下,电感电流的峰值肯定是不一样的,这个峰值和Vc比较为什么能产生同样的占空比信号呢?[/size][/font][/backcolor][/color] [color=#333333][backcolor=rgb(255, 255, 255)][font=微软雅黑][size=16px]谢谢![/size][/font][/backcolor][/color]
823浏览量 1回复量 关注量