查看: 6404  |  回复: 8
参赛作品《基于STM32F429II的触摸屏控制器》
中国龙飞
6
主题
19
回复
发表于2018-06-11 14:16:55 | 显示全部楼层
1# 电梯直达

【报名阶段需要填写的内容】


1. 参赛者姓名(必填项):中国龙飞


2. 单位或学校名称(选填项):电子工程师


3. 当前职务或职称(选填项):自由职业


4. 参赛作品的名字(必填项):基于STM32F429II的触摸屏控制器


5. 简要陈述您的idea和作品(必填项):采用STM32F429II控制芯片,配触摸屏芯片TSC2046,AT070-8.3液晶屏(800*480),IS42S32800D-6TLIA芯片SDRAM,以及A/D,串口等,通过采集外部的温度,压力等于物理量,控制加热设备按设定的参数运行。同时在液晶屏上显示相关的图表参数和曲线以及设备状态等。在后期的需要中,可以按需要加上WIFI,网口设备以扩展控制器的性能、


6. 拟用到的立创商城在售物料(必填项):STM32F429II IS42S32800D-6TLI 线路板


7. 拟用到的非立创商城物料或其它补充(必填项):继电器,外壳以及开关电源模块


8. 拟用到的EDA工具软件名称(必填项):AD10、立创EDA


【作品正式发表(报名成功后进入设计阶段)需要填写的内容】


一、作品简介

例如,可以包括但不局限于以下内容:

1.作品的整机外观图片或焊接组装好的PCBA图片;

2.作品的研究背景、目的和功能、市场应用前景;

3.作品在创新性、趣味性、实用性甚至公益性方面,有哪些亮点可体现?

         STM32F429II的触摸屏控制器焊成后的样品板如下图示,控制器主要由800*480 TIT液晶屏,触摸屏,数字量输入输出端子,模拟量输入输出端子,通信接口,电源接部分以及CPU,时钟,内存以胶SD卡接口等组成。

       

  


 

  点击查看大图

       目前在工业控制中一般采用PLC与工业触摸屏来实现一些控制项目的实施。但存在有如下问题:一、性价比差,稍微复杂一点的控制系统,带向个AD,DA,加一些通信什么的模块,好几千就不见了。因此对一些性价要求比较高的应用,这个成本很难接收;二、采用触摸屏与PLC这种应用方式,在一些行业难以满足要求,如一些实时性比较强的控制系统,如喷水织机控制器,喷气织机等,无法识用;三、维护比较困难,总要返回厂家去修,时间成本难以估计。四、在用应中,有一些特殊的控制要求无法现实,比如一些特殊算法,图形界面的显示,曲线的缩放等无法实现。在此利用STM32F429的高性能液晶驱动性能,搭配触摸芯片,TIT液晶屏,输出输出控制端口,串口,AD等模块,开发出这一个基于STM32F429II的触控一体机,以满足一些加热控制,AD测量以及常规的监控工艺要求。

    STM32F429II的触摸屏控制器在设计上,一个方是突出性价比,同时考虑到一些常应用的需要,可以在后期加上WIFI,RJ45网络接口,或加载GPRS模块或4G模块,以实现分散集中控制和远程监控的功能。在电磁兼容 性方便,力求作到符合规范,在搞干扰方面,输入输出采用光耦隔离,电源互相分离。在布板方面,力求作到相关元件以就近原则,强弱电分离,输入输出尽量远离等设计。

二、系统构架图

用流程图或思维导图等形式,描述您的作品的组成构架,即方案图。

此触摸屏控制器由220VAC---5VAC电源模块组成电源部分,控制内核为STM32F429,

采用RTOS系统外加EMWIN图形界面插件,RTOS采用三到四个任务任务,分别处理数据采集集,数椐处理,图表曲线显示,报警以及历史数据等

三、硬件部分的描述

1.附上原理图&PCB实物图的图片或者源文件(官方建议大家尽量用源文件上传),如果是图片,请确保图片是清晰可辨的;

2.用文字把该作品的实现原理、系统的工作过程大致讲解一下。

3.注明所用到的EDA工具软件名称并附上设计链接。

在设计中,部分采用了立付出的EAD,在使用中感觉功能部分需要进一步完善善,界面的操控不如AD9灵活,也许是不熟悉的原因,但能一这一个设计工具,还是非常不错的的,在这里赞一个,也在以后的工作中,会更多的采用立创EDA工具。

立创EDA核心原理图:https://lceda.cn/editor#id=75fe1e2c032844a887b1f8d1a62fd885


电路第一部分 液晶接线与触摸屏接线

  

二 CPU部分

 点击查看大图三输入输出部分接口

 点击查看大图

 


四、材料清单(BOM列表)

列出您这个作品所用到的主要器件(关键器件即可),比如单片机&ARM芯片、专用集成芯片(ASIC)、传感器、功能模块等。

如果所列出的芯片是来自我们立创商城上的,最好能写出该器件的商品编号或附上对应购买链接。

  主要元件有STM32F429II  IS42S32800D-6TLI  TSC2046  ULN2003  AS1117-3.3  TL431 1N4148  PC817

 点击查看大图

五、软件部分的描述(选填)

如果您的作品涉及到软件,请列出作品对应的软件工作流程图,及关键部分的例程、源码(如果您想开源的话请上传全部源码)。

     在这个设计中用到的软件有立创的EDL,AD9,MDK5,MX CUBE等软件。



   下面是关于触摸芯片TCS2046的驱动

*********************************************************************************************************
* 函 数 名: TSC2046_ReadAdc
* 功能说明: 选择一个模拟通道,启动ADC,并返回ADC采样结果
* 形    参:  _ucCh = 0 表示X通道; 1表示Y通道
* 返 回 值: 12位ADC值
*********************************************************************************************************
*/
uint16_t TSC2046_ReadAdc(uint8_t _ucCh)
{
uint16_t usAdc;
TSC2046_CS_0(); /* 使能TS2046的片选 */
/*
TSC2046 控制字(8Bit)
Bit7   = S     起始位,必须是1
Bit6:4 = A2-A0 模拟输入通道选择A2-A0; 共有6个通道。
Bit3   = MODE  ADC位数选择,0 表示12Bit;1表示8Bit
Bit2   = SER/DFR 模拟输入形式,  1表示单端输入;0表示差分输入
Bit1:0 = PD1-PD0 掉电模式选择位
*/
TSC2046_Write((1 << 7) | (_ucCh << 4)); /* 选择通道1, 测量X位置 */
/* 读ADC结果, 12位ADC值的高位先传,前12bit有效,最后4bit填0 */
usAdc = TSC2046_Read(); /* 发送的0x00可以为任意值,无意义 */
usAdc <<= 8;
usAdc += TSC2046_Read(); /* 获得12位的ADC采样值 */
usAdc >>= 3; /* 右移3位,保留12位有效数字.  */
TSC2046_CS_1(); /* 禁能片选 */
return (usAdc);
}

/*
*********************************************************************************************************
* 函 数 名: bsp_spiWrite1
* 功能说明: 向SPI总线发送一个字节。  SCK上升沿采集数据, SCK空闲时为高电平
* 形    参:  无
* 返 回 值: 无
*********************************************************************************************************
*/
uint8_t TSC2046_Write(uint8_t _ucByte)
{
uint8_t status,reg;
TSC2046_CS_0();   //使能SPI传输
// HAL_SPI_TransmitReceive(&hspi2,_ucByte,_ucByte,status,1,0xfff);
// HAL_SPI_TransmitReceive(&hspi2,status,status,1,0x0fff):
status = HAL_SPI_Transmit(&hspi2, &_ucByte, 1, 0xfff);
status = HAL_SPI_Receive(&hspi2, &reg, 1, 0xfff); //读取寄存器值
TSC2046_CS_1();   //禁止MPU9255
HAL_Delay(100);
return(status);
}

/*
*********************************************************************************************************
* 函 数 名: bsp_spiRead1
* 功能说明: 从SPI总线接收8个bit数据。  SCK上升沿采集数据, SCK空闲时为高电平
* 形    参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
uint8_t TSC2046_Read(void)
{
uint8_t reg_val=0;
TSC2046_CS_0();
HAL_SPI_Transmit(&hspi2, 0, 1, 0xfff); //发送读命令+寄存器号
  HAL_SPI_Receive(&hspi2, &reg_val, 1, 0xfff); //读取寄存器值
TSC2046_CS_1(); //禁止SPI传输
HAL_Delay(100);
return(reg_val);
}
液晶与SDRAM的部分程序如下下:

void MX_FMC_Init(void) 
{  
/* FMC initialization function */
  FMC_SDRAM_TimingTypeDef SdramTiming;

  /** Perform the SDRAM1 memory initialization sequence
  */
  hsdram1.Instance = FMC_SDRAM_DEVICE;
  /* hsdram1.Init */
  hsdram1.Init.SDBank = FMC_SDRAM_BANK1;
  hsdram1.Init.ColumnBitsNumber = FMC_SDRAM_COLUMN_BITS_NUM_9;
  hsdram1.Init.RowBitsNumber = FMC_SDRAM_ROW_BITS_NUM_13;
  hsdram1.Init.MemoryDataWidth = FMC_SDRAM_MEM_BUS_WIDTH_32;
  hsdram1.Init.InternalBankNumber = FMC_SDRAM_INTERN_BANKS_NUM_4;
  hsdram1.Init.CASLatency = FMC_SDRAM_CAS_LATENCY_3;
  hsdram1.Init.WriteProtection = FMC_SDRAM_WRITE_PROTECTION_DISABLE;
  hsdram1.Init.SDClockPeriod = FMC_SDRAM_CLOCK_PERIOD_3;
  hsdram1.Init.ReadBurst = FMC_SDRAM_RBURST_ENABLE;
  hsdram1.Init.ReadPipeDelay = FMC_SDRAM_RPIPE_DELAY_2;
  /* SdramTiming */
  SdramTiming.LoadToActiveDelay = 2;
  SdramTiming.ExitSelfRefreshDelay = 6;
  SdramTiming.SelfRefreshTime = 4;
  SdramTiming.RowCycleDelay = 6;
  SdramTiming.WriteRecoveryTime = 2;
  SdramTiming.RPDelay = 2;
  SdramTiming.RCDDelay = 2;

  if (HAL_SDRAM_Init(&hsdram1, &SdramTiming) != HAL_OK)
  {
    _Error_Handler(__FILE__, __LINE__);
  }

}

/**
  * @brief  Programs the SDRAM device.
  * @retval None
  */
void MX_SDRAM_InitEx(void)
{
  __IO uint32_t tmpmrd = 0;
  
  /* Step 1: Configure a clock configuration enable command */
  Command.CommandMode            = FMC_SDRAM_CMD_CLK_ENABLE;
  Command.CommandTarget          =  FMC_SDRAM_CMD_TARGET_BANK1;
  Command.AutoRefreshNumber      = 1;
  Command.ModeRegisterDefinition = 0;

  /* Send the command */
  HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);

  /* Step 2: Insert 100 us minimum delay */ 
  /* Inserted delay is equal to 1 ms due to systick time base unit (ms) */
  HAL_Delay(1);
    
  /* Step 3: Configure a PALL (precharge all) command */ 
  Command.CommandMode            = FMC_SDRAM_CMD_PALL;
  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
  Command.AutoRefreshNumber      = 1;
  Command.ModeRegisterDefinition = 0;

  /* Send the command */
  HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);  
  
  /* Step 4: Configure an Auto Refresh command */ 
  Command.CommandMode            = FMC_SDRAM_CMD_AUTOREFRESH_MODE;
  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
  Command.AutoRefreshNumber      = 8;
  Command.ModeRegisterDefinition = 0;

  /* Send the command */
  HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
  
  /* Step 5: Program the external memory mode register */
  tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          |\
                     SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |\
                     SDRAM_MODEREG_CAS_LATENCY_3           |\
                     SDRAM_MODEREG_OPERATING_MODE_STANDARD |\
                     SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;

  Command.CommandMode            = FMC_SDRAM_CMD_LOAD_MODE;
  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
  Command.AutoRefreshNumber      = 1;
  Command.ModeRegisterDefinition = tmpmrd;

  /* Send the command */
  HAL_SDRAM_SendCommand(&hsdram1, &Command, SDRAM_TIMEOUT);
  
  /* Step 6: Set the refresh rate counter */
  /* Set the device refresh rate */
  HAL_SDRAM_ProgramRefreshRate(&hsdram1, REFRESH_COUNT); 
}

/*  MSPInit/deInit Implementation */





六、作品演示

请上传您的作品的功能演示到腾讯视频,并编辑到本楼(或附上视频链接)。按要求上传视频可获得10分,具体详见活动规则。

https://v.qq.com/x/page/t0753l0o749.html

七、总结

例如您在完成该作品过程中的一些体会、碰到的技术问题或调试经验、作品的未来规划,及对我们主办方的建议和意见等。

立创小星
【官方工作人员】
4
主题
1178
回复
发表于2018-06-12 19:12:25   |  显示全部楼层
4#
恭喜您传播成功,获得3分。当前所有参赛选手分值统计表及活动详细介绍见:http://club.szlcsc.com/article/details_12591_1.html
立创小星
【官方工作人员】
4
主题
1178
回复
发表于2018-08-06 15:11:09   |  显示全部楼层
8#

记得上传视频哟,按要求上传即可获得10分。具体要求见下方↓


将拍摄好的作品录像上传到腾讯视频且标题为"第三届立创电子制作节参赛作品:《作品名》",并将腾讯视频链接更新到各自的参赛帖中,如标题长度受限可缩减标题,保留“第三届立创电子制作节”核心字眼即可。)

立创小星
【官方工作人员】
4
主题
1178
回复
发表于2018-08-27 12:03:46   |  显示全部楼层
9#

在这激动人心的时刻,恭喜楼主获得第三届立创电子制作节优秀奖,点击查看获奖名单:http://club.szlcsc.com/article/details_36337_1.html
同时,“最佳人气奖”正在投选中,识别下方二维码,为您喜爱的作品投上宝贵的一票吧!

 


主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部