標(biāo)題: 關(guān)于STM32的ADC/DAC問(wèn)題匯總 [打印本頁(yè)]

作者: 51hei小胡    時(shí)間: 2017-3-17 03:17
標(biāo)題: 關(guān)于STM32的ADC/DAC問(wèn)題匯總
1、STM32的DAC轉(zhuǎn)換是什么開(kāi)始的呢?

問(wèn):STM32的DAC轉(zhuǎn)換是什么開(kāi)始的呢?如何利用DAC輸出一個(gè)脈寬的控的單脈沖呢?
答:DAC是通過(guò)寫(xiě)入DAC輸出寄存器開(kāi)始的。另外,如果想要脈沖,使用TIM功能。


2、STM32的DAC輸出電壓

問(wèn):DAC的輸出電壓是如何調(diào)節(jié)的呢,輸入的數(shù)字量和輸出的電壓怎么不成比例呢,輸出電壓不符合數(shù)據(jù)手冊(cè)上提供的公式(DAC輸出=VREFXDOR/4095),求高人指點(diǎn),程序如下:
  1. #include"stm32f10x_lib.h"
  2. #defineDAC_DHR8R1_Address0x40007410
  3. DAC_InitTypeDefDAC_InitStructure;
  4. DMA_InitTypeDefDMA_InitStructure;
  5. ErrorStatusHSEStartUpStatus;
  6. uc8Escalator8bit[50]={0x0,0x33,0x66,0x99,0xcc,0xff};
  7. voidRCC_Configuration(void);
  8. voidGPIO_Configuration(void);
  9. voidNVIC_Configuration(void);
  10. voidDelay(vu32nCount);
  11. intmain(void)
  12. {
  13. #ifdefDEBUG
  14. debug();
  15. #endif
  16. RCC_Configuration();
  17. GPIO_Configuration();
  18. NVIC_Configuration();
  19. TIM_PrescalerConfig(TIM6,0xF,TIM_PSCReloadMode_Update);
  20. TIM_SetAutoreload(TIM6,0xFF);
  21. TIM_SelectOutputTrigger(TIM6,TIM_TRGOSource_Update);
  22. DAC_InitStructure.DAC_Trigger=DAC_Trigger_T6_TRGO;
  23. DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;
  24. DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable;
  25. DAC_Init(DAC_Channel_1,&DAC_InitStructure);
  26. DMA_DeInit(DMA2_Channel3);
  27. DMA_InitStructure.DMA_PeripheralBaseAddr=DAC_DHR8R1_Address;
  28. DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&Escalator8bit;
  29. DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;
  30. DMA_InitStructure.DMA_BufferSize=6;
  31. DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
  32. DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
  33. DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
  34. DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
  35. DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;
  36. DMA_InitStructure.DMA_Priority=DMA_Priority_High;
  37. DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
  38. DMA_Init(DMA2_Channel3,&DMA_InitStructure);
  39. DMA_Cmd(DMA2_Channel3,ENABLE);
  40. DAC_Cmd(DAC_Channel_1,ENABLE);
  41. DAC_DMACmd(DAC_Channel_1,ENABLE);
  42. TIM_Cmd(TIM6,ENABLE);
  43. while(1)
  44. {
  45. }
  46. }
  47. voidRCC_Configuration(void)
  48. {
  49. RCC_DeInit();
  50. RCC_HSEConfig(RCC_HSE_ON);
  51. HSEStartUpStatus=RCC_WaitForHSEStartUp();
  52. if(HSEStartUpStatus==SUCCESS)
  53. {
  54. FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  55. FLASH_SetLatency(FLASH_Latency_2);
  56. RCC_HCLKConfig(RCC_SYSCLK_Div1);
  57. RCC_PCLK2Config(RCC_HCLK_Div1);
  58. RCC_PCLK1Config(RCC_HCLK_Div2);
  59. RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);
  60. RCC_PLLCmd(ENABLE);
  61. while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)
  62. {
  63. }
  64. RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  65. while(RCC_GetSYSCLKSource()!=0x08)
  66. {
  67. }
  68. }
  69. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2,ENABLE);
  70. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA,ENABLE);
  71. RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
  72. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
  73. }
  74. voidGPIO_Configuration(void)
  75. {
  76. GPIO_InitTypeDefGPIO_InitStructure;
  77. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
  78. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  79. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  80. GPIO_Init(GPIOA,&GPIO_InitStructure);
  81. }
  82. voidNVIC_Configuration(void)
  83. {
  84. #ifdefVECT_TAB_RAM
  85. NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0);
  86. #else/*VECT_TAB_FLASH*/
  87. NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
  88. #endif
  89. }
  90. voidDelay(vu32nCount)
  91. {
  92. for(;nCount!=0;nCount--);
  93. }
復(fù)制代碼


輸出電壓為什么不是0~3.3V呢?



答1:(u32)&Escalator8bit;你把這個(gè)里面的數(shù)據(jù)強(qiáng)制轉(zhuǎn)換為32位,也就是0x0,0x33,0x66,0x99轉(zhuǎn)換為一個(gè)32位的數(shù)據(jù),你這樣做是不對(duì)的。你應(yīng)該定義一個(gè)16位的數(shù)組,然后VREFXDOR/4095算出DOR的值,DOR的值不能超過(guò)4095.



答2:DAC_OutputBuffer-輸出緩存使能再試試



1、關(guān)于STM32F103RE的DAC



問(wèn):關(guān)于STM32F103RE中有幾個(gè)DAC呢?是只有一個(gè)DAC(包括兩個(gè)通道)還是有兩個(gè)呢?



答:有2個(gè),這個(gè)你可以到引腳圖上面看到。

2、STM32F107的DAC例程都用TIMx更新啟動(dòng)DMA2



問(wèn):STM32F107的DAC例程都用TIMx更新啟動(dòng)DMA2,沒(méi)有不用TIMx啟動(dòng)DMA2自動(dòng)把數(shù)據(jù)傳送DAC的DHRxx寄存器里面?該如何設(shè)置呢?



答:不用TIM只能自己寫(xiě)時(shí)間判斷了.可以在while()里面寫(xiě)一個(gè)計(jì)數(shù)器的處理或者延時(shí)的處理.



3、STM32F107可以帶多個(gè)外置式ADC嗎?如果可以最多可以帶多少個(gè)?

問(wèn):STM32F107可以帶多個(gè)外置式ADC嗎?如果可以最多可以帶多少個(gè)?

答:一共有16個(gè)痛多的ADC,外置式是什么類型連接的?


答:外置式ADC型號(hào)是AD7490的16通道,SPI接口。因?yàn)榭偣灿?8路模擬量的,我想用三個(gè)外置ADC。另外我想問(wèn)一下是不是可以只用一個(gè)SPI接口就可以連接三個(gè)外置ADC呢?如果可以怎么做片選呢?萬(wàn)分感謝!



答:用其他3個(gè)IO做片選就可以



6、STM32F2ADC

問(wèn):STM32F系列單片機(jī)中ADC的每個(gè)通道的采用周期都是可配置的,我想問(wèn)一下采樣周期配置的越大轉(zhuǎn)換出來(lái)的值越精確嗎?比如STM32F2處理器的ADC采用周期可以是3、15、28、56、84、112、144、480.還有就是ADC中分為規(guī)則組和注入組,這兩種模式在使用上有什么本質(zhì)的不同嗎?



答:ADC采用周期越大采集間隔越長(zhǎng),這個(gè)值越小采集越精確。規(guī)則組此模式通過(guò)設(shè)置ADC_CR1寄存器上的DISCEN位激活。它可以用來(lái)執(zhí)行一個(gè)短序列的n次轉(zhuǎn)換(n<=8),此轉(zhuǎn)換是ADC_SQRx寄存器所選擇的轉(zhuǎn)換序列的一部分。數(shù)值n由ADC_CR1寄存器的DISCNUM[2:0]位給出。一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng)ADC_SQRx寄存器中描述的下一輪n次轉(zhuǎn)換,直到此序列所有的轉(zhuǎn)換完成為止�?偟男蛄虚L(zhǎng)度由ADC_SQR1寄存器的L[3:0]定義。舉例:n=3,被轉(zhuǎn)換的通道=0、1、2、3、6、7、9、10第一次觸發(fā):轉(zhuǎn)換的序列為0、1、2第二次觸發(fā):轉(zhuǎn)換的序列為3、6、7第三次觸發(fā):轉(zhuǎn)換的序列為9、10,并產(chǎn)生EOC事件第四次觸發(fā):轉(zhuǎn)換的序列0、1、2注入組此模式通過(guò)設(shè)置ADC_CR1寄存器的JDISCEN位激活。在一個(gè)外部觸發(fā)事件后,該模式按通道順序逐個(gè)轉(zhuǎn)換ADC_JSQR寄存器中選擇的序列。一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng)ADC_JSQR寄存器選擇的下一個(gè)通道序列的轉(zhuǎn)換,直到序列中所有的轉(zhuǎn)換完成為止�?偟男蛄虚L(zhǎng)度由ADC_JSQR寄存器的JL[1:0]位定義。例子:n=1,被轉(zhuǎn)換的通道=1、2、3第一次觸發(fā):通道1被轉(zhuǎn)換第二次觸發(fā):通道2被轉(zhuǎn)換第三次觸發(fā):通道3被轉(zhuǎn)換,并且產(chǎn)生EOC和JEOC事件第四次觸發(fā):通道1被轉(zhuǎn)換


答:非常感謝您的回答。其實(shí)我想問(wèn)的是采樣時(shí)間越大采樣值就越精確嗎?ADC采樣周期可以是3、15、28、56、84、112、144、480.最小的采樣時(shí)間是3個(gè)ADCCLK,最大的是480個(gè)ADCCLK,這個(gè)值是越大越好嗎?



答:ADC采用周期越大采集間隔越長(zhǎng),這個(gè)值越小采集越精確。



7、STM32ADC操作模式有哪些?

問(wèn):STM32ADC操作模式有哪些?

答:?jiǎn)未无D(zhuǎn)換模式:轉(zhuǎn)換一次則停止連續(xù)轉(zhuǎn)換模式:轉(zhuǎn)換完一次后即開(kāi)始下一次轉(zhuǎn)換掃描模式:掃描一組模擬通道間斷模式:每觸發(fā)一次,轉(zhuǎn)換序列中n個(gè)通道多種觸發(fā)方式



8、STM32的內(nèi)部溫度傳感器通過(guò)哪個(gè)AD采集?

答:STM32集成了片上的溫度傳感器,可以用來(lái)測(cè)量芯片內(nèi)部的溫度;STM32內(nèi)部溫度傳感器與ADC的通道16相連,與ADC配合使用實(shí)現(xiàn)溫度測(cè)量;測(cè)量范圍–40~125℃,精度±1.5℃。



9、STM32CPU溫度數(shù)值如何計(jì)算?

答:ADC轉(zhuǎn)換結(jié)束以后,讀取ADC_DR寄存器中的結(jié)果,通過(guò)下面的公式計(jì)算T(℃)=V25–VSENSE/Avg_Slope+25V25:溫度傳感器在25℃時(shí)的輸出電壓,典型值1.43VVSENSE:溫度傳感器的當(dāng)前輸出電壓,與ADC_DR寄存器中的結(jié)果ADC_ConvertedValue之間的轉(zhuǎn)換關(guān)系為:VSENSE=ADC_ConvertedValue*Vdd/Vdd_convert_value(0xFFF)Avg_Slope:溫度傳感器輸出電壓和溫度的關(guān)聯(lián)參數(shù),典型值4.3mV/℃轉(zhuǎn)換程序Vtemp_sensor=ADC_ConvertedValue*Vdd/Vdd_convert_value;Current_Temp=(V25-Vtemp_sensor)/Avg_Slope+25;


10、使用ADC時(shí)的注意事項(xiàng)是什么?

答:1、外部電路的等效輸入阻抗要匹配,采樣速度越快,輸入阻抗越小。STM32數(shù)據(jù)手冊(cè)上有對(duì)照表;2、只有在100腳和144腳的產(chǎn)品上才有VREF+和VREF-引出管腳。在其它產(chǎn)品封裝中,VREF+在芯片內(nèi)部與VDDA相連,VREF-在芯片內(nèi)部與VSSA相連;3、電路設(shè)計(jì)時(shí),在VREF+和VDDA上一定要有良好的濾波,使用高質(zhì)量的濾波電容且一定要盡量靠近芯片的管腳。



11、關(guān)于STM32 雙ADC 同步注入模式

問(wèn):我想用TIM控制雙ADC同步采樣6路信號(hào),因?yàn)槁?tīng)說(shuō)DMA方式會(huì)有錯(cuò)位的BUG,所以想用雙ADC同步注入方式采樣。但是看了手冊(cè)后有以下幾個(gè)疑惑
1. ADC_InitStructure.ADC_Mode = ADC_Mode_InjecSimult;
如果我設(shè)置了同步注入模式,可是觸發(fā)方式選擇什么呢。能否簡(jiǎn)單的說(shuō)明下同步注入
模式的初始化配置流程。
2. 在數(shù)據(jù)手冊(cè)上只有ADC1有注入數(shù)據(jù)寄存器,而ADC2是沒(méi)有的。但是在庫(kù)函數(shù)中發(fā)現(xiàn)有
ADC_GetInjectedConversionValue這樣一個(gè)函數(shù),用這個(gè)是否能讀出ADC2注入
組的數(shù)據(jù)呢?

答1:選擇自動(dòng)注入就可以,注意不可能同時(shí)使用自動(dòng)注入和間斷模式。 2、此模式轉(zhuǎn)換一個(gè)注入通道組。外部觸發(fā)來(lái)自ADC1的注入組多路開(kāi)關(guān)(由ADC1_CR2寄存器的JEXTSEL[2:0]選擇),它同時(shí)給ADC2提供同步觸發(fā)。





12、ADC 定時(shí)器觸發(fā)

問(wèn):按(下面)

/* ADC 初始化 */ void ADC_Configuration(void)
{ ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* Enable peripheral clocks ------------------------------------------------*/ /* Enable DMA1 clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /* Enable GPIOA clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); /* TIM3 Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); /* Enable ADC1 clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE); /* Configure PA.00, PA.01, PA.02, PA.03 (ADC Channel0, Channel1, Channel2, Channel3) as analog inputs */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStr

程序初始化后,只能觸發(fā)一次,轉(zhuǎn)換完數(shù)據(jù)都自動(dòng)復(fù)制到ADC_CvtValue中了。不能連續(xù)轉(zhuǎn)換。不知啥原因?



答1:ADC_DMARequestModeConfig(ADC1,ADC_DMAMode_Circular); 就好了。如果還有問(wèn)題的話你看看 ChannelNumbers; 值是多少? ADC_CvtValue; 是數(shù)組?還有你開(kāi)了中斷!要清除標(biāo)志位!




13、STM32 DAC 庫(kù)函數(shù)問(wèn)題

問(wèn):在函數(shù)DAC_SetChannel1Data(u32 DAC_Align, u16 Data)中,第二個(gè)參數(shù)u16 Data是什么意思,怎么使用?
答:DATA就是你要發(fā)送的數(shù)據(jù),也就是DAC輸出的電壓值





14、一個(gè)關(guān)于STM32F103VCT6 ADC的線性度的測(cè)試

問(wèn):本人同事最近做的項(xiàng)目,發(fā)現(xiàn) STM32F103VCT6 ADC 測(cè)試出現(xiàn)了一個(gè)現(xiàn)象,線性度不好, 使用外部2.5V基準(zhǔn),調(diào)整10K電位器, ADC轉(zhuǎn)換在 3072 3584 3840 三個(gè)點(diǎn)線性度很不好, 電壓變化20mv,這三個(gè)點(diǎn)才會(huì)發(fā)生跳變,跳變不是ADC碼+-1,而是加減了幾十個(gè)ADCbit,我認(rèn)為不是STM32內(nèi)部的硬件問(wèn)題,而是應(yīng)用問(wèn)題,不知道有人遇到過(guò)這種情況沒(méi)有? 從二進(jìn)制碼來(lái)看,這三個(gè)數(shù)的第八位都是0

貼一張STM32 ADC性能參數(shù)圖,按理說(shuō)STM32的ADC不至于我測(cè)試的這么差呀,是我們使用有問(wèn)題嗎?

答:ADC測(cè)試的時(shí)候盡量保證電壓的穩(wěn)定,最好用放大器來(lái)將其分壓,而電阻分壓在溫度、電流、電壓不同的情況下會(huì)有偏差。




15、STM32的DAC轉(zhuǎn)換是什么開(kāi)始的呢?





問(wèn):STM32的DAC轉(zhuǎn)換是什么開(kāi)始的呢?如何利用DAC輸出一個(gè)脈寬的控的單脈沖呢?

答:DAC是通過(guò)寫(xiě)入DAC輸出寄存器開(kāi)始的。另外,如果想要脈沖,使用TIM功能。




16、關(guān)于STM32F103RE的DAC個(gè)數(shù)問(wèn)題



問(wèn):關(guān)于STM32F103RE中有幾個(gè)DAC呢?是只有一個(gè)DAC(包括兩個(gè)通道)還是有兩個(gè)呢?

答:有2個(gè),這個(gè)你可以到引腳圖上面看到。




17、STM32F107的DAC例程都用TIMx更新啟動(dòng)DMA2



問(wèn):STM32F107的DAC例程都用TIMx更新啟動(dòng)DMA2,沒(méi)有不用TIMx啟動(dòng)DMA2自動(dòng)把數(shù)據(jù)傳送DAC的DHRxx寄存器里面?該如何設(shè)置呢?



最佳答案:

不用TIM只能自己寫(xiě)時(shí)間判斷了.可以在while()里面寫(xiě)一個(gè)計(jì)數(shù)器的處理或者延時(shí)的處理.




18、STM32如何與多個(gè)多通道ADC AD790進(jìn)行配置



問(wèn):STM32F107VCT6如何與多個(gè)多通道ADC AD790進(jìn)行SPI連接配置?謝謝各位大俠們

最佳答案:

通過(guò)AD790本身的控制,可以通過(guò)硬件來(lái)設(shè)置硬件地址。你可以詳細(xì)樂(lè)隊(duì)AD790的資料。




19、STM32F107可以帶多個(gè)外置式ADC嗎?如果可以最多可以帶多少個(gè)?



問(wèn):外置式ADC型號(hào)是AD7490的 16通道,SPI接口。因?yàn)榭偣灿?8路模擬量的,我想用三個(gè)外置ADC。另外我想問(wèn)一下是不是可以只用一個(gè)SPI接口就可以連接三個(gè)外置ADC呢?如果可以怎么做片選呢?萬(wàn)分感謝!

答:用其他3個(gè)IO做片選就可以




20、STM32F2 ADC



問(wèn):采樣時(shí)間越大采樣值就越精確嗎?ADC采樣周期可以是3、15、28、56、84、112、144、480. 最小的采樣時(shí)間是3個(gè)ADCCLK,最大的是480個(gè)ADCCLK,這個(gè)值是越大越好嗎?

答:ADC采用周期越大采集間隔越長(zhǎng),這個(gè)值越小采集越精確。 規(guī)則組 此模式通過(guò)設(shè)置ADC_CR1寄存器上的DISCEN位激活。它可以用來(lái)執(zhí)行一個(gè)短序列的n次轉(zhuǎn)換(n<=8),此轉(zhuǎn)換是ADC_SQRx寄存器所選擇的轉(zhuǎn)換序列的一部分。數(shù)值n由ADC_CR1寄存器的DISCNUM[2:0]位給出。 一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng)ADC_SQRx寄存器中描述的下一輪n次轉(zhuǎn)換,直到此序列所有的轉(zhuǎn)換完成為止�?偟男蛄虚L(zhǎng)度由ADC_SQR1寄存器的L[3:0]定義。 舉例: n=3,被轉(zhuǎn)換的通道 = 0、1、2、3、6、7、9、10 第一次觸發(fā):轉(zhuǎn)換的序列為 0、1、2 第二次觸發(fā):轉(zhuǎn)換的序列為 3、6、7 第三次觸發(fā):轉(zhuǎn)換的序列為 9、10,并產(chǎn)生EOC事件 第四次觸發(fā):轉(zhuǎn)換的序列 0、1、2 注入組 此模式通過(guò)設(shè)置ADC_CR1寄存器的JDISCEN位激活。在一個(gè)外部觸發(fā)事件后,該模式按通道順序逐個(gè)轉(zhuǎn)換ADC_JSQR寄存器中選擇的序列。 一個(gè)外部觸發(fā)信號(hào)可以啟動(dòng)ADC_JSQR寄存器選擇的下一個(gè)通道序列的轉(zhuǎn)換,直到序列中所有的轉(zhuǎn)換完成為止�?偟男蛄虚L(zhǎng)度由ADC_JSQR寄存器的JL[1:0]位定義。 例子: n=1,被轉(zhuǎn)換的通道 = 1、2、3 第一次觸發(fā):通道1被轉(zhuǎn)換 第二次觸發(fā):通道2被轉(zhuǎn)換 第三次觸發(fā):通道3被轉(zhuǎn)換,并且產(chǎn)生EOC和JEOC事件 第四次觸發(fā):通道1被轉(zhuǎn)換




21、STM32的雙ADC操作模式有哪些?

問(wèn):STM32的雙ADC操作模式有哪些?
最佳答案:
快速交替模式:在一個(gè)通道上以連續(xù)方式的快速交替模式
慢速交替模式:在一個(gè)通道上以連續(xù)方式的快速交替模式
交替觸發(fā)模式:
同步模式:
快速交替模式:在一個(gè)通道上以連續(xù)方式的快速交替模式
慢速交替模式:在一個(gè)通道上以連續(xù)方式的快速交替模式
交替觸發(fā)模式:


作者: 6274865    時(shí)間: 2017-3-17 11:00
好貼,頂一個(gè)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1