蓝蓝的天
获得 57 次赞
帮助过170人
我有一个力值传感器,型号是YZC-219推荐激励电压8~15V。我接的10.4V,传感器上站个人,用万用表200mV档测没变化。老板说力值传感器是好的。搞不明白,请高手指教,谢谢!
画了个板子,芯片用的STM32F103C8T6部分原理图如下:部分程序如下:int main(void){ long int i; Stm32_Clock_Init(2); //72MHz //IWDG_Init(6800); //看门狗初始化256分频800计数复位时间5s CPU_Init(); //CPU初始化 VAR_Init(); //变量初始化 Timer_Init(); //定时器初始化 usart1_init(115200); //串口1初始化 usart2_init(115200); //串口2初始化 while(1) { GPIO_SetBits(GPIOAGPIO_Pin_12); for(i=0;i<1000000;i++); GPIO_ResetBits(GPIOA GPIO_Pin_12 ); for(i=0;i<1000000;i++); }}功能就是闪灯,可是程序下进去没反应,后来发现,要先仿真一次就好了。改了程序再下进去,还是没反应,需要先仿真一次。请问高手,遇到过这种情况吗?怎么解决?谢谢!
我下位机用STM32F767,通过网口每50ms往电脑发一次数,发10秒钟,电脑显示。实测图形见上面。可以看到,还没到10秒图形就不变了。上位机定时是准的。不知道是下位机定时准不准还是别的问题。这怎么查呀?谢谢!
项目中需要这个电压值,第一次打板用LM317,结果接上负载电压就下降。我想改用MC34063可是用Proteus仿真不成功,老是得不到需要的电压值。请问大神,用哪种DCDC比较好?谢谢!
芯片是STM32F767用万用表测,AD值比较稳定,基本不变。可是AD采样值变化比较大,以下是采样的10个数,电压值一样。1941 1928 1930 1933 1952 1967 1963 1955 1958 1959程序如下:j++; if(j>=170000) { j=0; adcx=Get_Adc_Average(ADC_CHANNEL_1420);//获取通道5的转换值,20次取平均 PF4 adcy=Get_Adc_Average(ADC_CHANNEL_920);//获取通道5的转换值,20次取平均 PF3 tcp_demo_sendbuf1[0]=0x33; tcp_demo_sendbuf1[1]=adcy/10000+0x30; tcp_demo_sendbuf1[2]=adcy%10000/1000+0x30; tcp_demo_sendbuf1[3]=adcy%1000/100+0x30; tcp_demo_sendbuf1[4]=adcy%100/10+0x30; tcp_demo_sendbuf1[5]=adcy%10+0x30; udp_demo_senddata(udppcb); }#include "adc.h"#include "delay.h"////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途//ALIENTEK STM32F7开发板//ADC驱动代码 //正点原子@ALIENTEK//技术论坛:www.openedv.com//创建日期:2015/12/26//版本:V1.0//版权所有,盗版必究。//Copyright(C) 广州市星翼电子科技有限公司 2014-2024//All rights reserved ////////////////////////////////////////////////////////////////////////////////// ADC_HandleTypeDef ADC3_Handler;//ADC句柄//初始化ADC//ch: ADC_channels //通道值 0~16取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16void MY_ADC_Init(void){ ADC3_Handler.Instance=ADC3; ADC3_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; //4分频,ADCCLK=PCLK2/4=108/4=27MHZ ADC3_Handler.Init.Resolution=ADC_RESOLUTION_12B; //12位模式 ADC3_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT; //右对齐 ADC3_Handler.Init.ScanConvMode=DISABLE; //非扫描模式 ADC3_Handler.Init.EOCSelection=DISABLE; //关闭EOC中断 ADC3_Handler.Init.ContinuousConvMode=DISABLE; //关闭连续转换 ADC3_Handler.Init.NbrOfConversion=1; //1个转换在规则序列中 也就是只转换规则序列1 ADC3_Handler.Init.DiscontinuousConvMode=DISABLE; //禁止不连续采样模式 ADC3_Handler.Init.NbrOfDiscConversion=0; //不连续采样通道数为0 ADC3_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START; //软件触发 ADC3_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;//使用软件触发 ADC3_Handler.Init.DMAContinuousRequests=DISABLE; //关闭DMA请求 HAL_ADC_Init(&ADC3_Handler); //初始化 }//ADC底层驱动,引脚配置,时钟使能//此函数会被HAL_ADC_Init()调用//hadc:ADC句柄void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc){ GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_ADC3_CLK_ENABLE(); //使能ADC1时钟 __HAL_RCC_GPIOF_CLK_ENABLE(); //开启GPIOA时钟 GPIO_Initure.Pin=GPIO_PIN_4; //PF4 GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟 GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉 HAL_GPIO_Init(GPIOF&GPIO_Initure); GPIO_Initure.Pin=GPIO_PIN_3; //PF3 GPIO_Initure.Mode=GPIO_MODE_ANALOG; //模拟 GPIO_Initure.Pull=GPIO_NOPULL; //不带上下拉 HAL_GPIO_Init(GPIOF&GPIO_Initure);}//获得ADC值//ch: 通道值 0~16,取值范围为:ADC_CHANNEL_0~ADC_CHANNEL_16//返回值:转换结果u16 Get_Adc(u32 ch) { ADC_ChannelConfTypeDef ADC3_ChanConf; ADC3_ChanConf.Channel=ch; //通道 ADC3_ChanConf.Rank=1; //1个序列 ADC3_ChanConf.SamplingTime=ADC_SAMPLETIME_480CYCLES; //采样时间 ADC3_ChanConf.Offset=0; HAL_ADC_ConfigChannel(&ADC3_Handler&ADC3_ChanConf); //通道配置 HAL_ADC_Start(&ADC3_Handler); //开启ADC HAL_ADC_PollForConversion(&ADC3_Handler10); //轮询转换 return (u16)HAL_ADC_GetValue(&ADC3_Handler); //返回最近一次ADC1规则组的转换结果}//获取指定通道的转换值,取times次然后平均 //times:获取次数//返回值:通道ch的times次转换结果平均值u16 Get_Adc_Average(u32 chu8 times){ u32 temp_val=0; u8 t; for(t=0;t<times;t++) { temp_val+=Get_Adc(ch); delay_ms(5); } return temp_val/times;} 20次取平均。请问高手,如何解决?谢谢!更多操作